import {
    AfterContentChecked,
    AfterContentInit, AfterViewChecked,
    AfterViewInit,
    Component, DoCheck,
    OnChanges,
    OnDestroy,
    OnInit, SimpleChanges
} from '@angular/core';

@Component({
    selector: 'app-goods',
    templateUrl: './goods.component.html',
    styleUrls: ['./goods.component.scss']
})
export class GoodsComponent implements OnChanges, OnInit, DoCheck,
    AfterContentInit, AfterContentChecked,
    AfterViewInit, AfterViewChecked,
    OnDestroy {

    constructor() {
    }

    // 设置或重新设置数据绑定的输入属性时响应
    // 发生的非常频繁 , 操作可能影响性能
    // 没有输入属性@Input 则不会被调用
    ngOnChanges(changes: SimpleChanges): void {
    }

    // 第一轮 ngOnChanges() 完成之后调用，只调用一次
    // 不管有没有调用 ngOnChanges(), 都会调用
    ngOnInit(): void {
        //  是组件获取初始数据的好地方
    }

    //  每次 ngOnChanges() 后,
    // 首次  ngOnInit()  后,
    ngDoCheck(): void {
    }

    // 投影进入组件视图
    //第一次 ngDoCheck() 之后调用，只调用一次。
    ngAfterContentInit(): void {
    }

    // 每当 Angular 检查完被投影到组件或指令中的内容之后调用。
    // ngAfterContentInit() 和每次 ngDoCheck() 之后调用
    ngAfterContentChecked(): void {
    }

    //当 Angular 初始化完组件视图及其子视图或包含该指令的视图之后调用。
    // 第一次 ngAfterContentChecked() 之后调用，只调用一次。
    ngAfterViewInit(): void {
    }

    //每当 Angular 做完组件视图和子视图或包含该指令的视图的变更检测之后调用。
    //ngAfterViewInit() 和每次 ngAfterContentChecked() 之后调用。
    ngAfterViewChecked(): void {
    }


    //每当 Angular 每次销毁指令/组件之前调用并清扫。 在这儿反订阅可观察对象和分离事件处理器，以防内存泄漏。
    //在 Angular 销毁指令或组件之前立即调用。
    ngOnDestroy(): void {

        // 这里是释放资源的地方，这些资源不会自动被垃圾回收。如果你不这样做，就存在内存泄漏的风险。
        // 取消订阅可观察对象和 DOM 事件。
        // 停止 interval 计时器。
        // 反注册该指令在全局或应用服务中注册过的所有回调。

    }

}
